package com.sisgesbyte.services.sistema;

import java.util.LinkedList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.AccesoModuloDetRequest;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.seguridad.MantenimientoAccesoModuloDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.seguridad.AccesoModuloEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.AccesoModuloBean;
import com.sisgesbyte.services.sistema.bean.AccesoModuloListaResponse;

@Stateless
public class MantenimientoAccesoModuloImpl implements MantenimientoAccesoModulo {

	@EJB
	private MantenimientoAccesoModuloDao mantenimientoAccesoModuloDao;
	
	@Inject
	private Validaciones validaciones;
	
	@Override
	public AccesoModuloListaResponse mostrarAccesoModulo(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		String mensajeTransaccionMetodo = "[mostrarAccesoModulo idTx=" + codTransaccion + "] - ";
		AccesoModuloListaResponse response = new AccesoModuloListaResponse();
		
		try{
			List<AccesoModuloEntity> daoAcceso = null;
			response.setIdTransaccion(codTransaccion);
			
			try{
				daoAcceso = mantenimientoAccesoModuloDao.listarAccesoModulos(cadenaFiltros);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al listar de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_COD_IDT54);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_MSJ_IDT54);
				
				return response;
			}
			
			if(daoAcceso.size() > 0){
				List<AccesoModuloBean> lista = new LinkedList<AccesoModuloBean>();
				for(AccesoModuloEntity row : daoAcceso){
					AccesoModuloBean bean = new AccesoModuloBean();
					bean.setActive(row.getActive());
					bean.setId(row.getId());
					bean.setModulo(validaciones.validarCamposString(row.getModulo()));
					bean.setModuloId(row.getModulo_id());
					bean.setRol(validaciones.validarCamposString(row.getRol()));
					bean.setRolId(row.getRol_id());
					lista.add(bean);
				}
				
				response.setListaAccesoModulo(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_COD_IDF53);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_MSJ_IDF53);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_COD_IDT54);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_ACCESOMODULO_MSJ_IDT54);
			return response;
		}
		
		
		
		return response;
	}

	@Override
	public GenericResponse nuevoAccesoModulo(String codTransaccion, AccesoModuloBean accesoModulo) {
		String mensajeTransaccionMetodo = "[nuevoAccesoModulo idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			response.setIdTransaccion(codTransaccion);
			GenericEntity daoAccesoModulo = null;
			
			AccesoModuloDetRequest newAccesoModulo = new AccesoModuloDetRequest();
			newAccesoModulo.setActive(accesoModulo.getActive());
			newAccesoModulo.setCodModulo(validaciones.validarCampoInteger(accesoModulo.getModuloId()));
			newAccesoModulo.setCodRol(validaciones.validarCampoInteger(accesoModulo.getRolId()));
			
			try{
				daoAccesoModulo = mantenimientoAccesoModuloDao.guardarAccesoModulo(newAccesoModulo);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al insertar de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_COD_IDT55);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_MSJ_IDT55);
				return response;
			}
			
			if(daoAccesoModulo.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_COD_IDF54);
				response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_MSJ_IDF54);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_COD_IDT55);
			response.setMensajeRespuesta(ConstantesInternasSistema.NUEVO_ACCESOMODULO_MSJ_IDT55);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse editAccesoModulo(String codTransaccion, AccesoModuloBean accesoModulo) {
		String mensajeTransaccionMetodo = "[editAccesoModulo idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			
			response.setIdTransaccion(codTransaccion);
			GenericEntity daoAccesoModulo = null;
			
			AccesoModuloDetRequest editAccesoModulo = new AccesoModuloDetRequest();
			editAccesoModulo.setActive(accesoModulo.getActive());
			editAccesoModulo.setCodModulo(validaciones.validarCampoInteger(accesoModulo.getModuloId()));
			editAccesoModulo.setCodRol(validaciones.validarCampoInteger(accesoModulo.getRolId()));
			editAccesoModulo.setId(accesoModulo.getId());
			
			try{
				daoAccesoModulo = mantenimientoAccesoModuloDao.actualizarAccesoModulo(editAccesoModulo);
				
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Hubo un error al editar de BD " +e);
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_COD_IDT56);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_MSJ_IDT56);
				return response;
			}
			
			if(daoAccesoModulo.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_COD_IDF55);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_MSJ_IDF55);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error en el proceso " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_COD_IDT56);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDIT_ACCESOMODULO_MSJ_IDT56);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse deleteAccesoModulo(String codTransaccion, int codAccesoModulo) {
		String mensajeTransaccionMetodo = "[deleteAccesoModulo idTx=" + codTransaccion + "] - ";
		GenericResponse response = new GenericResponse();
		try{
			response.setIdTransaccion(codTransaccion);
			GenericEntity daoAccesoModulo = mantenimientoAccesoModuloDao.eliminarAccesoModulo(codAccesoModulo);
			
			if(daoAccesoModulo.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOMODULO_COD_IDF56);
				response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOMODULO_MSJ_IDF56);
			}
			
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Hubo un error al eliminar en BD " +e);
			response.setCodigoRespuesta(ConstantesInternasSistema.DELETE_ACCESOMODULO_COD_IDT57);
			response.setMensajeRespuesta(ConstantesInternasSistema.DELETE_ACCESOMODULO_MSJ_IDT57);
			return response;
		}
		
		return response;
	}

}
